// WebSocket 连接和消息处理

// 初始化WebSocket连接
function initWebSocket() {
    const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
    const wsUrl = `${protocol}//${window.location.host}/ws/${clientId}`;
    
    websocket = new WebSocket(wsUrl);
    
    websocket.onopen = function(event) {
        addLogEntry('WebSocket连接已建立');
    };
    
    websocket.onmessage = function(event) {
        try {
            const data = JSON.parse(event.data);
            handleWebSocketMessage(data);
        } catch (e) {
            console.error('解析WebSocket消息失败:', e);
        }
    };
    
    websocket.onclose = function(event) {
        addLogEntry('WebSocket连接已断开，正在重连...', 'error');
        // 尝试重连
        setTimeout(initWebSocket, 3000);
    };
    
    websocket.onerror = function(error) {
        addLogEntry('WebSocket连接错误', 'error');
    };
}

// 处理WebSocket消息
function handleWebSocketMessage(data) {
    switch(data.type) {
        case 'progress':
            updateProgress(data.progress);
            // 如果是铁粉圈视频下载，也更新专用进度条
            if (data.message && (data.message.includes('铁粉圈视频') || data.task_type === 'tiefenquan-video')) {
                if (typeof updateTiefenquanVideoProgress === 'function') {
                    updateTiefenquanVideoProgress(data.progress, data.message || `${data.progress}%`);
                }
            }
            // 如果是B站下载，更新B站专用进度条
            if (data.message && (data.message.includes('B站') || data.task_type === 'bilibili')) {
                if (typeof updateBilibiliProgress === 'function') {
                    updateBilibiliProgress(data.progress, data.message || `${data.progress}%`);
                }
            }
            // 如果是快手下载，更新快手专用进度条
            if (data.message && (data.message.includes('快手') || data.task_type === 'kuaishou' || data.task_type === 'kuaishou_batch')) {
                if (typeof updateKuaishouProgress === 'function') {
                    updateKuaishouProgress(data.progress, data.message || `${data.progress}%`);
                }
            }
            break;
        case 'log':
            // 优先根据task_type判断，然后根据消息内容判断应该显示在哪个日志区域
            let logHandled = false;

            // 根据task_type判断
            if (data.task_type === 'tiefenquan-video') {
                if (typeof addTiefenquanVideoLog === 'function') {
                    addTiefenquanVideoLog(data.message);
                    logHandled = true;
                }
            }
            else if (data.task_type === 'bilibili') {
                if (typeof addBilibiliLog === 'function') {
                    addBilibiliLog(data.message);
                    logHandled = true;
                } else {
                    console.error('addBilibiliLog function not found!');
                }
            }
            else if (data.task_type === 'kuaishou' || data.task_type === 'kuaishou_batch') {
                if (typeof addKuaishouLog === 'function') {
                    addKuaishouLog(data.message);
                } else {
                    addLogEntry(data.message);
                }
                logHandled = true;
            }
            else if (data.task_type === 'douyin') {
                addLogEntry(data.message);
                logHandled = true;
            }
            // 如果没有task_type，则根据消息内容判断
            else if (data.message && data.message.includes('铁粉圈视频')) {
                if (typeof addTiefenquanVideoLog === 'function') {
                    addTiefenquanVideoLog(data.message);
                    logHandled = true;
                }
            }
            else if (data.message && data.message.includes('B站')) {
                if (typeof addBilibiliLog === 'function') {
                    addBilibiliLog(data.message);
                    logHandled = true;
                }
            }
            // 如果是快手相关日志，添加到主日志区域（因为快手没有专用日志区域）
            else if (data.message && data.message.includes('快手')) {
                addLogEntry(data.message);
                logHandled = true;
            }
            // 如果是微密圈相关日志，添加到主日志区域（因为微密圈没有专用日志区域）
            else if (data.message && (data.message.includes('微密圈') || data.message.includes('VMQ'))) {
                addLogEntry(data.message);
                logHandled = true;
            }

            // 如果没有被专用日志区域处理，则添加到主日志区域（抖音解析区）
            if (!logHandled) {
                addLogEntry(data.message);
            }
            break;
        case 'complete':
            // 优先根据task_type判断，然后根据消息内容判断应该显示在哪个日志区域
            let completeHandled = false;

            // 根据task_type判断
            if (data.task_type === 'tiefenquan-video') {
                if (typeof addTiefenquanVideoLog === 'function') {
                    addTiefenquanVideoLog(data.message);
                }
                if (typeof resetTiefenquanVideoDownloadButton === 'function') {
                    resetTiefenquanVideoDownloadButton();
                }
                completeHandled = true;
            }
            else if (data.task_type === 'bilibili') {
                if (typeof addBilibiliLog === 'function') {
                    addBilibiliLog(data.message);
                }
                if (typeof resetBilibiliDownloadButton === 'function') {
                    resetBilibiliDownloadButton();
                }
                completeHandled = true;
            }
            else if (data.task_type === 'kuaishou' || data.task_type === 'kuaishou_batch') {
                if (typeof addKuaishouLog === 'function') {
                    addKuaishouLog(data.message);
                } else {
                    addLogEntry(data.message);
                }
                if (typeof resetKuaishouDownloadButton === 'function') {
                    resetKuaishouDownloadButton();
                }
                // 如果是批量下载，重置批量下载按钮状态
                if (data.task_type === 'kuaishou_batch') {
                    updateButtonState('kuaishouBatch', false);
                    currentDownloadTasks.kuaishouBatch = null;
                }
                completeHandled = true;
            }
            else if (data.task_type === 'douyin') {
                addLogEntry(data.message);
                completeHandled = true;
            }
            // 如果没有task_type，则根据消息内容判断
            else if (data.message && data.message.includes('铁粉圈视频下载完成')) {
                if (typeof addTiefenquanVideoLog === 'function') {
                    addTiefenquanVideoLog(data.message);
                }
                if (typeof resetTiefenquanVideoDownloadButton === 'function') {
                    resetTiefenquanVideoDownloadButton();
                }
                completeHandled = true;
            }
            else if (data.message && data.message.includes('B站视频下载完成')) {
                if (typeof addBilibiliLog === 'function') {
                    addBilibiliLog(data.message);
                }
                if (typeof resetBilibiliDownloadButton === 'function') {
                    resetBilibiliDownloadButton();
                }
                completeHandled = true;
            }
            // 如果是快手下载完成，添加到主日志区域
            else if (data.message && data.message.includes('快手')) {
                addLogEntry(data.message);
                completeHandled = true;
            }
            // 如果是微密圈下载完成，添加到主日志区域
            else if (data.message && (data.message.includes('微密圈') || data.message.includes('VMQ'))) {
                addLogEntry(data.message);
                completeHandled = true;
            }

            // 如果没有被专用区域处理，则添加到主日志区域
            if (!completeHandled) {
                addLogEntry(data.message);
            }

            updateProgress(100);
            // 重置所有下载状态（因为无法确定具体是哪个任务完成）
            resetAllDownloadStates();
            break;
        case 'error':
            // 优先根据task_type判断，然后根据错误消息内容判断应该显示在哪个日志区域
            let errorHandled = false;

            // 根据task_type判断
            if (data.task_type === 'tiefenquan-video') {
                if (typeof addTiefenquanVideoLog === 'function') {
                    addTiefenquanVideoLog(`错误: ${data.message}`, 'error');
                    errorHandled = true;
                }
            }
            else if (data.task_type === 'bilibili') {
                if (typeof addBilibiliLog === 'function') {
                    addBilibiliLog(`错误: ${data.message}`, 'error');
                    errorHandled = true;
                }
            }
            else if (data.task_type === 'kuaishou' || data.task_type === 'kuaishou_batch') {
                if (typeof addKuaishouLog === 'function') {
                    addKuaishouLog(`错误: ${data.message}`, 'error');
                } else {
                    addLogEntry(`错误: ${data.message}`, 'error');
                }
                // 如果是批量下载，重置批量下载按钮状态
                if (data.task_type === 'kuaishou_batch') {
                    updateButtonState('kuaishouBatch', false);
                    currentDownloadTasks.kuaishouBatch = null;
                }
                errorHandled = true;
            }
            else if (data.task_type === 'douyin') {
                addLogEntry(`错误: ${data.message}`, 'error');
                errorHandled = true;
            }
            // 如果没有task_type，则根据消息内容判断
            else if (data.message && data.message.includes('铁粉圈视频')) {
                if (typeof addTiefenquanVideoLog === 'function') {
                    addTiefenquanVideoLog(`错误: ${data.message}`, 'error');
                    errorHandled = true;
                }
            }
            else if (data.message && data.message.includes('B站')) {
                if (typeof addBilibiliLog === 'function') {
                    addBilibiliLog(`错误: ${data.message}`, 'error');
                    errorHandled = true;
                }
            }
            // 如果是快手相关错误，添加到主日志区域
            else if (data.message && data.message.includes('快手')) {
                addLogEntry(`错误: ${data.message}`, 'error');
                errorHandled = true;
            }
            // 如果是微密圈相关错误，添加到主日志区域
            else if (data.message && (data.message.includes('微密圈') || data.message.includes('VMQ'))) {
                addLogEntry(`错误: ${data.message}`, 'error');
                errorHandled = true;
            }

            // 如果没有被专用区域处理，则添加到主日志区域
            if (!errorHandled) {
                addLogEntry(`错误: ${data.message}`, 'error');
            }
            break;
        case 'proxy_test_result':
            if (data.success) {
                showToast(`✅ 代理连接测试成功: ${data.message}`, 'success');
            } else {
                showToast(`❌ 代理连接测试失败: ${data.message}`, 'error');
            }
            break;
        case 'proxy_settings_applied':
            showToast(`✅ 代理设置已应用: ${data.message}`, 'success');
            break;
        case 'cookies_applied':
            showToast(`✅ Cookie设置已应用: ${data.message}`, 'success');
            break;
        case 'general_settings_applied':
            showToast(`✅ 通用设置已应用: ${data.message}`, 'success');
            break;
        case 'premium_password_changed':
            if (data.success) {
                // 检查是否在弹窗模式（changePasswordSuccess元素存在）
                const successElement = document.getElementById('changePasswordSuccess');
                if (successElement) {
                    // 弹窗模式 - 使用弹窗提示
                    showChangePasswordSuccess('密码修改成功！');
                } else {
                    // 设置页面模式 - 使用Toast通知
                    showToast('🔒 密码修改成功！', 'success');
                }
                console.log('密码修改成功！');
            } else {
                // 检查是否在弹窗模式
                const errorElement = document.getElementById('changePasswordError');
                if (errorElement) {
                    // 弹窗模式 - 使用弹窗错误提示
                    showChangePasswordError(`密码修改失败: ${data.message}`);
                } else {
                    // 设置页面模式 - 使用Toast通知
                    showToast(`❌ 密码修改失败: ${data.message}`, 'error');
                }
                console.error(`密码修改失败: ${data.message}`);
            }
            break;
    }
}
